const express = require('express')
const bodyParser = require('body-parser')
const cors = require('cors') // 引入 cors
const { saveToken, getTokenStatus, updateTokenStatus } = require('./db/mockDB')
const { generateToken } = require('./utils/tokenUtils')

const app = express()
const PORT = 3100

// 配置 CORS 中间件
app.use(
  cors({
    origin: '*', // 允许所有域访问，也可以指定特定域名
    methods: ['GET', 'POST'], // 允许的请求方法
    allowedHeaders: ['Content-Type'], // 允许的请求头
  })
)
// 中间件
app.use(bodyParser.json())

// API 1: 获取 Token
app.get('/api/login/get-token', (req, res) => {
  const token = generateToken() // 生成唯一标识
  saveToken(token) // 保存到数据库，初始状态为 "waiting"
  res.json({ token })
})

// API 2: 查询 Token 状态
app.get('/api/login/check-status', (req, res) => {
  const { token } = req.query
  if (!token) {
    return res.status(400).json({ error: 'Token is required' })
  }

  const status = getTokenStatus(token) // 获取 token 的状态
  if (!status) {
    return res.status(404).json({ error: 'Token not found or expired' })
  }

  res.json({ status })
})

// API 3: 授权登录
app.post('/api/login/authorize', (req, res) => {
  const { token } = req.body

  if (!token) {
    return res.status(400).json({ error: 'Token is required' })
  }

  const status = getTokenStatus(token)
  if (status === 'expired' || status === null) {
    return res.status(400).json({ error: 'Token is invalid or expired' })
  }

  // 更新 token 状态为 "logged_in"
  updateTokenStatus(token, 'logged_in')
  res.json({ success: true, message: 'Login authorized successfully' })
})

// 启动服务
app.listen(PORT, () => {
  console.log(`Server is running on http://localhost:${PORT}`)
})
